﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebProjectOrder.WebServices
{
    public class Document
    {
        #region Atributos
        private int _IdCuentaAuxiliar;
        private String _EstadoDocumento;
        private int _BaseDocId;
        private int _IdMoneda;
        #endregion

        #region Constructors
        /// <summary>
        /// Constructor de la clase. Recibe 2 parametros para el id del tipo de cta especial y el nombre
        /// </summary>
        public Document(int _idDocumento, int _codigoDocumento, string _tipoDocumento, string _owner, DateTime _fechaEmision, DateTime _fechaVencimiento, 
            string _cuenta)
        {
            this.idDocumento = _idDocumento;
            this.codigoDocumento = _codigoDocumento;
            this.tipoDocumento = _tipoDocumento;
            this.owner = _owner;
            this.fechaEmision = _fechaEmision;
            this.fechaVencimiento = _fechaVencimiento;
            this.cuenta = _cuenta;           
        }

        /// <summary>
        /// Constructor para los documentos de orden y compra
        /// </summary>
        /// <param name="docType">Acrónimo del tipo de documento que és (OC, OV, EM...)</param>
        /// <param name="idAuxiliarAccount">Id de la cuenta mayor del cliente o proveedor al que está asociado</param>
        /// <param name="postingDate">Fecha de contabilización</param>
        /// <param name="deliveryExpDate">Fecha de vencimiento o de entrega</param>
        /// <param name="idMoneda">Id de la moneda en que está el documento</param>
        /// <param name="idDocBase">Id del documento base, no se pasa nada si no tiene</param>
        /// <param name="amountBeforeTax">Monto antes de impuestos</param>
        /// <param name="taxAmount">Monto de impuestos</param>
        /// <param name="totalAmount">Monto después de impuestos</param>
        public Document(String docType, int idAuxiliarAccount, DateTime postingDate, DateTime deliveryExpDate, int idMoneda, int idDocBase, double amountBeforeTax, double taxAmount, double totalAmount)
        {
            this.tipoDocumento = docType;
            this._IdCuentaAuxiliar = idAuxiliarAccount;
            this.fechaEmision = postingDate;
            this.fechaVencimiento = deliveryExpDate;
            this._IdMoneda = idMoneda;
            this._BaseDocId = idDocBase;
            this.subTotal = amountBeforeTax;
            this.impuestos = taxAmount;
            this.total = totalAmount;
        }


        /// <summary>
        /// Constructor por defecto de la clase
        /// </summary>
        public Document()
        {
            
        }
        #endregion

        #region Properties
        /// <summary>
        /// Numero que identifica de manera unica el documento
        /// </summary>
        public int idDocumento
        {
            get;
            set;
        }

        /// <summary>
        /// Numero asignado al documento en el momento de creación
        /// </summary>
        public int codigoDocumento
        {
            get;
            set;
        }

        /// <summary>
        /// Nombre de tipo de documento que es
        /// </summary>
        public String tipoDocumento
        {
            get;
            set;
        }

        /// <summary>
        /// Nombre del dueño del documeno
        /// </summary>
        public String owner
        {
            get;
            set;
        }

        /// <summary>
        /// Fecha en la que se emitio el documento
        /// </summary>
        public DateTime fechaEmision
        {
            get;
            set;
        }

        /// <summary>
        /// Fecha en la que vence el documento
        /// </summary>
        public DateTime fechaVencimiento
        {
            get;
            set;
        }

        /// <summary>
        /// Cuenta a la que se aplica el documento
        /// </summary>
        public string cuenta
        {
            get;
            set;
        }

        /// <summary>
        /// Listado de items utilizados en el documento
        /// </summary>
        public ItemDocument[] detalleDoc
        {
            get;
            set;
        }

        /// <summary>
        /// Subtotal del documento
        /// </summary>
        public double subTotal
        {
            get;
            set;
        }

        /// <summary>
        /// Monto del descuento si tiene
        /// </summary>
        public double descuento
        {
            get;
            set;
        }

        /// <summary>
        /// Monto a deducir en impuestos si tiene
        /// </summary>
        public double impuestos
        {
            get;
            set;
        }

        /// <summary>
        /// Total del documento
        /// </summary>
        public double total
        {
            get;
            set;
        }

        /// <summary>
        /// Estado actual del documento
        /// </summary>
        public String EstadoDocumento
        {
            get { return _EstadoDocumento; }
            set { _EstadoDocumento = value; }
        }

        /// <summary>
        /// Id de la cuenta auxiliar a la que está relacionado
        /// </summary>
        public int IdCuentaAuxiliar
        {
            get { return _IdCuentaAuxiliar; }
            set { _IdCuentaAuxiliar = value; }
        }

        /// <summary>
        /// Id del documento que se usó como previo a este
        /// </summary>
        public int BaseDocId
        {
            get { return _BaseDocId; }
            set { _BaseDocId = value; }
        }

        /// <summary>
        /// Id de la moneda en que está el documento
        /// </summary>
        public int IdMoneda
        {
            get { return _IdMoneda; }
            set { _IdMoneda = value; }
        }
        #endregion
    }
}
